home *** CD-ROM | disk | FTP | other *** search
- package mx.utils
- {
- import flash.utils.Dictionary;
- import mx.core.IPropertyChangeNotifier;
- import mx.core.IUIComponent;
- import mx.core.IUID;
- import mx.core.mx_internal;
-
- use namespace mx_internal;
-
- public class UIDUtil
- {
- mx_internal static const VERSION:String = "2.0.1.0";
-
- private static const ALPHA_CHARS:String = "0123456789ABCDEF";
-
- private static var uidDictionary:Dictionary = new Dictionary(true);
-
- public function UIDUtil()
- {
- super();
- }
-
- public static function createUID() : String
- {
- var _loc1_:* = null;
- var _loc2_:int = 0;
- var _loc3_:int = 0;
- var _loc4_:Number = NaN;
- _loc1_ = "";
- _loc2_ = 0;
- while(_loc2_ < 8)
- {
- _loc1_ += ALPHA_CHARS.charAt(Math.round(Math.random() * 15));
- _loc2_++;
- }
- _loc2_ = 0;
- while(_loc2_ < 3)
- {
- _loc1_ += "-";
- _loc3_ = 0;
- while(_loc3_ < 4)
- {
- _loc1_ += ALPHA_CHARS.charAt(Math.round(Math.random() * 15));
- _loc3_++;
- }
- _loc2_++;
- }
- _loc1_ += "-";
- _loc4_ = Number(new Date().getTime());
- _loc1_ += ("0000000" + _loc4_.toString(16).toUpperCase()).substr(-8);
- _loc2_ = 0;
- while(_loc2_ < 4)
- {
- _loc1_ += ALPHA_CHARS.charAt(Math.round(Math.random() * 15));
- _loc2_++;
- }
- return _loc1_;
- }
-
- public static function getUID(param1:Object) : String
- {
- var result:String = null;
- var xitem:XML = null;
- var nodeKind:String = null;
- var notificationFunction:Function = null;
- var item:Object = param1;
- result = null;
- if(item == null)
- {
- return result;
- }
- if(item is IUID)
- {
- result = IUID(item).uid;
- if(result == null || result.length == 0)
- {
- result = createUID();
- IUID(item).uid = result;
- }
- }
- else if(item is IPropertyChangeNotifier && !(item is IUIComponent))
- {
- result = IPropertyChangeNotifier(item).uid;
- if(result == null || result.length == 0)
- {
- result = createUID();
- IPropertyChangeNotifier(item).uid = result;
- }
- }
- else
- {
- if(item is String)
- {
- return item as String;
- }
- try
- {
- if(item is XMLList && item.length == 1)
- {
- item = item[0];
- }
- if(item is XML)
- {
- xitem = XML(item);
- nodeKind = xitem.nodeKind();
- if(nodeKind == "text" || nodeKind == "attribute")
- {
- return xitem.toString();
- }
- notificationFunction = xitem.notification();
- if(!(notificationFunction is Function))
- {
- notificationFunction = XMLNotifier.mx_internal::initializeXMLForNotification(xitem);
- }
- if(notificationFunction["uid"] == undefined)
- {
- result = notificationFunction["uid"] = createUID();
- }
- result = notificationFunction["uid"];
- }
- else
- {
- if("mx_internal_uid" in item)
- {
- return item.mx_internal_uid;
- }
- if("uid" in item)
- {
- return item.uid;
- }
- result = uidDictionary[item];
- if(!result)
- {
- result = createUID();
- try
- {
- item.mx_internal_uid = result;
- }
- catch(e:Error)
- {
- uidDictionary[item] = result;
- }
- }
- }
- }
- catch(e:Error)
- {
- result = item.toString();
- }
- }
- return result;
- }
- }
- }
-
-